Leaflet básico

Leaflet

Introdução

Leaflet é uma das bibliotecas open source mais famosas para mapas iterativos.

Características

  • Panorâmica e zoom iterativos.
  • Compor mapas com marcadores, polígonos, linhas, popups e dentro outros.
  • Incorporar mapas em documentos knitr/R Markdown/Quarto e aplicativos Shiny.
  • Renderizar facilmente objetos espaciais dos pacotes sp ou sf, ou data frames com colunas de latitude/longitude.

Mapa básico

# lê o arquivo geojson como um objeto espacial "sp"
dados = geojsonio::geojson_read("pontos_unb.geojson", what = "sp")

# cria o mapa estático
mapa = leaflet(dados, options = leafletOptions(dragging = FALSE, 
                                               touchZoom = F, 
                                               doubleClickZoom = F, 
                                               zoomControl = F, 
                                               scrollWheelZoom = F)) %>%
  # adiciona os tiles do mapa 
  addTiles() %>%
  
  # adiciona os marcadores
  addMarkers(lng = dados@coords[,1], 
             lat = dados@coords[,2], 
             label = dados$nome,
             popup = dados$descricao)

Mapa básico

Brasil

if(!file.exists("brasil.geojson")) {
  # cria o arquivo geojson a partir do arquivo json
  dados_brasil = st_read("brazil_geo.json/brazil_geo.json") %>%
    st_write("brasil.geojson", driver = "GEOJSON")
}

# lê o arquivo geojson como um objeto espacial "sp"
dados_brasil = geojsonio::geojson_read("brasil.geojson", what = "sp")

# paleta de cores para cada estado
cores = colorFactor(terrain.colors(length(dados_brasil$id)), dados_brasil$id)

# cria o mapa estático
mapa_b = leaflet(dados_brasil, options = leafletOptions(dragging = FALSE, 
                                               touchZoom = F, 
                                               doubleClickZoom = F, 
                                               zoomControl = F, 
                                               scrollWheelZoom = F)) %>%
  
  # adiciona os tiles do mapa com imagens de satélite
  addTiles(urlTemplate = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",
           options = tileOptions(
             attribution = 'Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community'
           )) %>%
  
  # adiciona os polígonos
  addPolygons(stroke = F,
              fillOpacity = 1,
              fillColor = ~cores(dados_brasil$id),
              label = dados_brasil$id,
              popup = dados_brasil$name)

Brasil

Cameras de Segurança

# lê o arquivo geojson como um objeto espacial "sp"
dados_cameras = geojsonio::geojson_read("Cameras_de_Seguranca.geojson", what = "sp")

# converte as coordenadas UTM para latlog
coords = dados_cameras %>%
  as_tibble() %>%
  st_as_sf(coords = c("point_x","point_y"), 
           crs = "+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs") %>%
  st_transform(crs = 4326) %>%
  st_coordinates()

# substitui as coordenadas UTM pelas coordenadas latlog
dados_cameras$point_x = coords[,"X"]
dados_cameras$point_y = coords[,"Y"]

# funcao que padroniza os popupinfo de cada camera
set_popup = function(popup) {
  popup = str_to_lower(popup) %>%
    str_trim()
  
  if(str_length(popup) == 0) return("N/A")
  
  if(str_detect(popup, "furtad") || str_detect(popup, "vandalizad")) return("Furtada/Vandalizada")
  else if(str_detect(popup, "não")) return("Não Instalada")
  
  return("Instalada")
}

# substitui para os popupinfo padronizado
dados_cameras$popupinfo = unlist(map(dados_cameras$popupinfo, set_popup))

# paleta de cores para cada estado da camera
pal = colorFactor(c("green", "orange", "red", "blue"), 
                  domain = c("Instalada", "Furtada/Vandalizada", "Não Instalada", "N/A"), ordered = T)

# cria o mapa
mapa_c = leaflet(dados_cameras) %>%
  
  # adiciona o tiles do mapa
  addTiles() %>%
  
  # define uma visão inicial
  setView(lng = -47.88281317652584, lat = -15.79409191690003, zoom = 12) %>%
  
  # adiciona os marcadores
  addCircleMarkers(lng = ~dados_cameras$point_x, 
                   lat = ~dados_cameras$point_y, 
                   label = ~dados_cameras$name, 
                   popup = ~dados_cameras$popupinfo, 
                   color = ~pal(dados_cameras$popupinfo),
                   radius = 6)

Cameras de Segurança

Regiões Administrativas DF

if(!file.exists("regioes_adm_df.geojson")) {
  # cria o arquivo geojson a partir do arquivo json
  dados_brasil = st_read("regioes_adm_df.json") %>%
    st_write("regioes_adm_df.geojson", driver = "GEOJSON")
}

# lê o arquivo geojson como um objeto espacial "sp"
dados_regioes = geojsonio::geojson_read("regioes_adm_df.geojson", what = "sp")

# paleta de cores para cada região administrativa
cores = colorFactor("Paired", dados_regioes$id)

# cria o mapa
mapa_df = leaflet(dados_regioes) %>%
  
  # adiciona os tiles
  addTiles() %>%
  
  # adiciona os polígonos
  addPolygons(stroke = T,
              fillOpacity = 0.75,
              smoothFactor = 0.5,
              color = "black",
              weight = 1,
              opacity = 1,
              fillColor = ~cores(dados_regioes$id),
              label = dados_regioes$ra)

Regiões Administrativas DF